# -*- coding: utf-8 -*-

# 01 设计一个streamlit的聊天界面，调用ai.gitee.com/v1的api端口进行对话补全。要求界面友好，配色美观。直接提供完整代码，不要解释代码。
#  调试错误： stream=True的解码识别不好，无法实时显示。改为stream=false成功。
# 02 改用stream。
# 不成功，更换deepseek新的对话，不受前面的影响。生成了一个新的stream=false的代码



import streamlit as st
import requests
import json
# from streamlit.components.v1 import html

st.set_page_config(
    page_title="Qwen2.5 Chat",
    page_icon="🤖",
    layout="wide",
    initial_sidebar_state="expanded"
)

custom_css = """
<style>
[data-testid="stAppViewContainer"] {
    background-color: #f5f5f5;
}
[data-testid="stHeader"] {
    background-color: #1a73e8;
}
[data-testid="stSidebar"] {
    background-color: #ffffff;
}
.css-1d391kg {
    padding-top: 3rem;
}
.css-1fv8s86 p {
    font-size: 1.1rem;
}
.user-message {
    background-color: #1a73e8;
    color: white;
    border-radius: 15px;
    padding: 10px 15px;
    margin: 5px 0;
}
.bot-message {
    background-color: #e8f0fe;
    color: #202124;
    border-radius: 15px;
    padding: 10px 15px;
    margin: 5px 0;
}
</style>
"""
st.markdown(custom_css, unsafe_allow_html=True)

if "messages" not in st.session_state:
    st.session_state.messages = []

with st.sidebar:
    st.header("设置")
    if st.button("清除聊天记录"):
        st.session_state.messages = []

def generate_response(prompt):
    try:
        response = requests.post(
            "http://localhost:11434/v1/chat/completions",
            json={
                "model": "qwen2.5:3b",
                "messages": [{'role':'user', 'content': prompt}],
                "stream": False
            },
            timeout=60
        )
        # return json.loads(response.text)["response"]
        return json.loads(response.text)["choices"][0]["message"]["content"]
    except Exception as e:
        return f"出错啦: {str(e)}"

for message in st.session_state.messages:
    with st.chat_message(message["role"]):
        st.markdown(f'<div class="{"user-message" if message["role"] == "user" else "bot-message"}">{message["content"]}</div>', 
                    unsafe_allow_html=True)

if prompt := st.chat_input("输入你的消息..."):
    st.session_state.messages.append({"role": "user", "content": prompt})
    with st.chat_message("user"):
        st.markdown(f'<div class="user-message">{prompt}</div>', unsafe_allow_html=True)

    with st.chat_message("assistant"):
        with st.spinner("正在思考..."):
            full_response = generate_response(prompt)
            st.markdown(f'<div class="bot-message">{full_response}</div>', unsafe_allow_html=True)
    st.session_state.messages.append({"role": "assistant", "content": full_response})
